﻿using UnityEngine;
using UnityEngine.UI;
using System.Collections;

namespace TowerDefence
{
    public class WaveSpawner : MonoBehaviour
    {
        // 引用波次管理器
        WaveManager waveManager;

        // 敌人生成点
        public Transform spawnPoint;

        // 敌人移动的路径索引
        public int route = 0;

        // 敌人图标相关
        [Header("Enemy Icons")]
        public GameObject iconBackground;
        public GameObject goblinIcon;
        public GameObject wolfIcon;
        public GameObject beeIcon;
        public GameObject batIcon;
        public GameObject spiderlingIcon;
        public GameObject treantIcon;
        public GameObject magmaIcon;
        public GameObject cobraIcon;
        public GameObject golemIcon;
        public GameObject dragonIcon;

        // 游戏开始时调用
        private void Start()
        {
            // 查找并引用波次管理器
            waveManager = FindObjectOfType<WaveManager>();

            // 关闭敌人图标背景
            iconBackground.SetActive(false);
        }

        // 每帧更新
        private void Update()
        {
            // 如果波次管理器的倒计时已开始
            if (waveManager.beginDownTimer)
            {
                // 初始化当前波次
                InitWave();
            }
        }

        // 初始化当前波次
        public void InitWave()
        {
            // 获取当前波次信息
            Wave wave = waveManager.waves[waveManager.waveIndex];

            // 遍历波次中的敌人信息
            for (int i = 0; i < wave.enemyInfo.Length; i++)
            {
                // 如果敌人的路径与指定路径相符，倒计时为0，且波次未开始
                if (wave.enemyInfo[i].route.Equals(route) &&
                    wave.enemyInfo[i].downTime <= 0 &&
                    wave.enemyInfo[i].waveHasBegun == false)
                {
                    // 标记波次已开始
                    wave.enemyInfo[i].waveHasBegun = true;

                    // 开始生成敌人的协程
                    StartCoroutine(SpawnWave(wave, i));
                }
            }
        }

        // 生成波次中的敌人的协程
        IEnumerator SpawnWave(Wave wave, int index)
        {
            // 遍历生成指定数量的敌人
            for (int i = 0; i < wave.enemyInfo[index].count; i++)
            {
                // 调用生成敌人的方法
                SpawnEnemy(wave.enemyInfo[index].prefab);

                // 等待一定时间后再生成下一个敌人
                yield return new WaitForSeconds(1f / wave.enemyInfo[index].rate);
            }
        }

        // 生成单个敌人的方法
        public void SpawnEnemy(GameObject enemy)
        {
            // 在指定位置生成敌人
            Instantiate(enemy, spawnPoint.position, spawnPoint.rotation);
        }


        // 显示指定敌人类型的图标
        public void DisplayEnemyIcon(EnemyType type)
        {
            // 激活敌人图标背景
            iconBackground.SetActive(true);

            // 根据敌人类型切换对应图标的激活状态
            switch (type)
            {
                case EnemyType.Goblin:
                    goblinIcon.SetActive(true);
                    break;
                case EnemyType.Wolf:
                    wolfIcon.SetActive(true);
                    break;
                case EnemyType.Spiderling:
                    spiderlingIcon.SetActive(true);
                    break;
                case EnemyType.Bee:
                    beeIcon.SetActive(true);
                    break;
                case EnemyType.Treant:
                    treantIcon.SetActive(true);
                    break;
                case EnemyType.Bat:
                    batIcon.SetActive(true);
                    break;
                case EnemyType.Magma:
                    magmaIcon.SetActive(true);
                    break;
                case EnemyType.Cobra:
                    cobraIcon.SetActive(true);
                    break;
                case EnemyType.Golem:
                    golemIcon.SetActive(true);
                    break;
                case EnemyType.Dragon:
                    dragonIcon.SetActive(true);
                    break;
            }
        }

        // 关闭所有敌人图标
        public void CloseEnemyIcons()
        {
            // 关闭所有敌人图标和背景
            goblinIcon.SetActive(false);
            wolfIcon.SetActive(false);
            spiderlingIcon.SetActive(false);
            beeIcon.SetActive(false);
            treantIcon.SetActive(false);
            batIcon.SetActive(false);
            magmaIcon.SetActive(false);
            cobraIcon.SetActive(false);
            golemIcon.SetActive(false);
            dragonIcon.SetActive(false);
            iconBackground.SetActive(false);
        }

    }
}
